/* eslint valid-jsdoc: "off" */

'use strict';

const path = require('path');

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = exports = {};

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1616146112761_8416';

  // add your middleware config here
  config.middleware = [
    'req', // 中间件-请求
    'auth', // 中间件-是否登录
  ];

  config.auth = {
    enable: false, // auth中间件注册全局开关，默认close
  };

  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
    // jwt config
    jwt: {
      secret: '1qazxsw209poilkm',
    },
  };

  // 上传文件
  config.multipart = {
    mode: 'file',
    tmpdir: path.join('public/upload', appInfo.name), // 配置文件缓存目录
  };

  // 静态资源配置
  config.static = {
    prefix: '/public/',
    dir: [ path.join(appInfo.baseDir, 'public') ], // 多静态文件入口
    maxAge: 31536000,
  };

  // 参数校验
  config.validate = {
    convert: true, // 将原始参数转换为特定类型，默认为false
    validateRoot: false, // 是否验证传入的值必须是一个对象，默认为false
  };
  config.mongoose = {
    client: {
      url: 'mongodb://liubao:!liu123321@115.159.82.175/egg-admin?authSource=admin',
      options: { useUnifiedTopology: true },
    },
  };

  config.httpclient = {
    // 是否开启本地 DNS 缓存，默认关闭，开启后有两个特性
    // 1. 所有的 DNS 查询都会默认优先使用缓存的，即使 DNS 查询错误也不影响应用
    // 2. 对同一个域名，在 dnsCacheLookupInterval 的间隔内（默认 10s）只会查询一次
    enableDNSCache: false,
    // 对同一个域名进行 DNS 查询的最小间隔时间
    dnsCacheLookupInterval: 10000,
    // DNS 同时缓存的最大域名数量，默认 1000
    dnsCacheMaxLength: 1000,

    request: {
      // 默认 request 超时时间
      timeout: 3000,
    },

    httpAgent: {
      // 默认开启 http KeepAlive 功能
      keepAlive: true,
      // 空闲的 KeepAlive socket 最长可以存活 4 秒
      freeSocketTimeout: 4000,
      // 当 socket 超过 30 秒都没有任何活动，就会被当作超时处理掉
      timeout: 30000,
      // 允许创建的最大 socket 数
      maxSockets: Number.MAX_SAFE_INTEGER,
      // 最大空闲 socket 数
      maxFreeSockets: 256,
    },

    httpsAgent: {
      // 默认开启 https KeepAlive 功能
      keepAlive: true,
      // 空闲的 KeepAlive socket 最长可以存活 4 秒
      freeSocketTimeout: 4000,
      // 当 socket 超过 30 秒都没有任何活动，就会被当作超时处理掉
      timeout: 30000,
      // 允许创建的最大 socket 数
      maxSockets: Number.MAX_SAFE_INTEGER,
      // 最大空闲 socket 数
      maxFreeSockets: 256,
    },
  };
  config.security = {
    csrf: { // 安全防范
      enable: false,
    },
  };

  return {
    ...config,
    ...userConfig,
  };
};
